package api

import (
	"context"
	"gdmin/servlet"
	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/common/hlog"
	"github.com/cloudwego/hertz/pkg/route"
)

func DeptApi(r *route.RouterGroup) {
	r.POST("/dept/save", createDept)
	r.POST("/dept/update", updateDept)
	r.POST("/dept/page", queryDept)
	r.POST("/dept/list", listDept)
	r.POST("/dept/tree", treeDept)
	r.POST("/dept/byId/:id", byIdDept)
	r.POST("/dept/delete/:id", deleteDeptById)

}

// 根据id删除部门
// @Tags      部门
// @Summary   根据id删除部门
// @Produce   application/json
// @Param id path int true "部门id"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.DeptResp}  "成功"
// @Router    /dept/delete/:id [post]
func deleteDeptById(ctx context.Context, c *app.RequestContext) {
	deptService.DeleteById(c.Param("id"))
	servlet.Ok(c)
	return
}

// 根据id查询部门
// @Tags      部门
// @Summary   根据id查询部门
// @Produce   application/json
// @Param id path int true "部门id"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.DeptResp}  "成功"
// @Router    /dept/byId/:id [post]
func byIdDept(ctx context.Context, c *app.RequestContext) {

	servlet.OkWithData(c, deptService.ById(c.Param("id")))
	return
}

// 部门树
// @Tags      部门
// @Summary   部门树
// @Produce   application/json
// @Param     id  query       int false  "上级id"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.DeptResp}  "成功"
// @Router    /dept/tree [post]
func treeDept(ctx context.Context, c *app.RequestContext) {

	tree, err := deptService.Tree(c.Query("id"))
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)

		return
	}
	servlet.OkWithData(c, tree)
	return
}

// 部门列表
// @Tags      部门
// @Summary   部门列表
// @Produce   application/json
// @Param     id  query       int false  "上级id"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.DeptResp}  "成功"
// @Router    /dept/list [post]
func listDept(ctx context.Context, c *app.RequestContext) {

	servlet.OkWithData(c, deptService.List(c.Query("id")))
	return
}

// 部门分页查询
// @Tags      部门
// @Summary   部门分页查询
// @Produce   application/json
// @Param     name  query       string false  "部门名称"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.DeptResp}  "成功"
// @Router    /dept/page [post]
func queryDept(ctx context.Context, c *app.RequestContext) {
	var req servlet.QueryDeptReq
	err := c.Bind(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)

		return
	}
	servlet.OkWithData(c, deptService.QueryDept(&req))
	return
}

// 修改部门
// @Tags      部门
// @Summary   修改部门
// @accept    application/json
// @Produce   application/json
// @Param     data  body      servlet.UpdateDeptReq             true  "修改参数"
// @Success   200   {object}  servlet.Resp{msg=string,data=model.Dept}  "成功"
// @Router    /dept/update [post]
func updateDept(ctx context.Context, c *app.RequestContext) {
	var req servlet.UpdateDeptReq
	err := c.BindAndValidate(&req)
	if err != nil {

		servlet.FailWithMessage(err.Error(), c)
		return
	}
	dept, err := deptService.UpdateDept(&req)
	hlog.Info("dept = ", dept)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.OkWithData(c, &dept)
	return
}

// 创建部门
// @Tags      部门
// @Summary   创建部门
// @accept    application/json
// @Produce   application/json
// @Param     data  body      servlet.CreateDeptReq             true  "创建参数"
// @Success   200   {object}  servlet.Resp{msg=string,data=model.Dept}  "成功"
// @Router    /dept/update [post]
func createDept(ctx context.Context, c *app.RequestContext) {
	var req servlet.CreateDeptReq
	err := c.BindAndValidate(&req)
	if err != nil {

		servlet.FailWithMessage(err.Error(), c)
		return
	}
	dept, err := deptService.CreateDept(&req)
	hlog.Info("dept = ", dept)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.OkWithData(c, &dept)
	return
}
